package org.facyt.vacas.entities.vacas;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.facyt.vacas.entities.login.Grupo;

@Entity
@Table(name = "materia_prima", schema="vacas")
public class MateriaPrima implements Serializable {

	@Id
	@SequenceGenerator(name = "materia_prima_seq", sequenceName = "vacas.materia_prima_id_seq")
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "materia_prima_seq")
	@Column(name = "id")
	private Integer id;

	@Column(name = "descripcion", columnDefinition = "bpchar")
	private String descripcion;

	//TODO: recomendacion de los genios del java! evr si funciona la presicion y escala.
	@Column(name = "costo", columnDefinition = "float8")//, precision = 19, scale = 6)
	private BigDecimal costo;

	@ManyToOne()
	@JoinColumn(name = "fk_unidad")
	private Unidad unidad;

	@ManyToOne()
	@JoinColumn(name = "fk_clasificacion")
	private Clasificacion clasificacion;

	@ManyToOne
	@JoinColumn(name = "fk_grupo")
	private Grupo grupo;

	@ManyToOne
	@JoinColumn(name = "fk_tipo_energia_mp")
	private TipoEnergia tipoEnergia;
	
	@OneToMany(mappedBy = "materiaprima", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	private List<ComponenteValor> composicion = new ArrayList<ComponenteValor>();

	public Grupo getGrupo() {
		return grupo;
	}

	public void setGrupo(Grupo grupo) {
		this.grupo = grupo;
	}

	public Clasificacion getClasificacion() {
		return clasificacion;
	}

	public void setClasificacion(Clasificacion clasificacion) {
		this.clasificacion = clasificacion;
	}

	public BigDecimal getCosto() {
		return costo;
	}

	public void setCosto(BigDecimal costo) {
		this.costo = costo;
	}

	public Unidad getUnidad() {
		return unidad;
	}

	public void setUnidad(Unidad unidad) {
		this.unidad = unidad;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getDescripcion() {
		return descripcion.trim();
	}

	public void setDescripcion(String descripcion) {
		String nombre = descripcion.substring(0, 1).toUpperCase()
				+ descripcion.substring(1);
		this.descripcion = nombre;
	}

	

	public List<ComponenteValor> getComposicion() {
		return composicion;
	}

	public void setComposicion(List<ComponenteValor> composicion) {
		this.composicion = composicion;
	}
	
	

	public TipoEnergia getTipoEnergia() {
		return tipoEnergia;
	}

	public void setTipoEnergia(TipoEnergia tipoEnergia) {
		this.tipoEnergia = tipoEnergia;
	}

	public boolean equals(Object o) {
		return (this.getId() == ((MateriaPrima) o).getId() && this
				.getDescripcion().equalsIgnoreCase(
						((MateriaPrima) o).getDescripcion()));
	}

}
